package com.example.project.projectspringcloud.service.user;

import com.example.project.projectspringcloud.common.OperationException;
import com.example.project.projectspringcloud.entity.Page;
import com.example.project.projectspringcloud.entity.user.User;
import com.example.project.projectspringcloud.entity.user.pojo.UserPojo;

import java.util.List;
import java.util.Set;

public interface UserService {

    /**
     * 获取单个用户
     * ==============================================================================
     *
     * @param user
     * @return
     */
    User get(User user);

    /**
     * 私有查找用户, 包含密码等私有信息查找
     * ==============================================================================
     *
     * @param record
     * @return
     */
    User getWithPrivate(User record);

    /**
     * 返回用户列表
     * ==============================================================================
     *
     * @param page
     * @param user
     * @return
     */
    List<User> list(Page page, User user);

    /**
     * 私有查找用户列表, 包含密码等私有信息查找
     * ==============================================================================
     *
     * @param page
     * @param user
     * @return
     */
    List<User> listWithPrivate(Page page, User user);

    /**
     * 删除用户
     * ==============================================================================
     *
     * @param ids
     * @return
     */
    boolean delete(Integer[] ids);

    /**
     * 保存用户
     * ==============================================================================
     *
     * @param user
     * @return
     * @throws OperationException
     */
    boolean save(User user) throws OperationException;

    /**
     * 不判空保存
     * ==============================================================================
     *
     * @param user
     * @return
     * @throws OperationException
     */
    boolean saveAbsolute(User user) throws OperationException;

    /**
     * 修改用户首页可见状态
     * ==============================================================================
     *
     * @param user
     * @return
     * @throws OperationException
     */
    boolean changeShow(User user) throws OperationException;

    /**
     * 用户注册
     * ==============================================================================
     *
     * @param userPojo
     * @return
     * @throws OperationException
     */
    boolean register(UserPojo userPojo) throws OperationException;

    /**
     * 找回密码
     * ==============================================================================
     *
     * @param user
     */
    void retrieve(UserPojo user) throws OperationException;

    /**
     * 通过ids和type获取
     * ==============================================================================
     *
     * @param dataIds     用户IDs
     * @param contentType 用户类型
     * @return
     */
    List<User> list(Set<Integer> dataIds, Integer contentType);

    /**
     * 更改密码
     *
     * @param user 目标用户
     * @param password 新密码
     * @param passwords 重复新密码
     * @return
     */
    boolean changePassword(User user, String password, String passwords) throws OperationException;
}
